This disclosure relates generally to a user interface automation framework and, more particularly, to generating input values for a test dataset from a datastore based on semantic annotations.
A number of different tools are commercially available for automated testing of software applications. For example, Rational Functional Tester™ (RFT) is a tool for automated testing of software applications that allows software developers to create tests that mimic the actions of a human tester. RFT is primarily used by software quality assurance (SQA) teams to perform automated regression testing. A test recorder of RFT allows software developers to create test scripts that capture actions of a tester during testing of an application under development. A test script is usually produced as either a Java or Visual Basic .NET application and may be presented as a series of screen shots that form a visual storyboard. In general, test scripts may be edited using standard language commands and syntax or by interacting with screen shots in a storyboard. Test scripts can then be executed to validate functionality of an application under development. Typically, test scripts are run in a batch mode where several scripts are grouped together and run unattended.
Regression testing refers to any type of software testing that seeks to uncover new software bugs (regressions) in existing functional and non-functional areas after changes (e.g., enhancements, patches or configuration changes) have been made to the software. One of the main reasons for regression testing software is to ensure that a change to one part of the software does not adversely affect other parts of the software. Regression testing may include re-running previously executed tests and checking whether program behavior has changed and/or whether previously fixed faults have re-emerged. Regression testing can be used to test a system efficiently by systematically selecting the appropriate minimum set of tests needed to adequately cover a particular change. Regression tests can be broadly categorized as functional tests or unit tests. Functional tests exercise the complete program with various inputs. Unit tests exercise individual functions, subroutines, or objects of the program.
During the recording phase, verification points may be introduced to capture an expected system state, e.g., a specific value in a field or a given property of an object, such as enabled or disabled. During playback, any discrepancies between a baseline captured during recording and the actual results achieved during playback may be noted in a log. The tester can then review the log to determine if an actual software bug was discovered. Storyboard testing enables testers to edit test scripts by acting against screen shots of an application under test.
In RFT, an object map is the underlying technology used to locate and act against objects within an application. An object map may be automatically created by a test recorder when tests are created and typically includes a list of properties used to identify objects during playback. During playback, RFT uses the object map to locate and act against the application interface. However, during development, objects may change between the time a test script is recorded and when the test script is executed. In RFT, discrepancies between object definitions captured during recording and playback may be ignored to ensure that test script execution runs uninterrupted.
It is common for a single functional regression test to be executed multiple times with different data. To facilitate execution of a functional regression test with different data, a test recorder may automatically parameterize data entry values and store the data entry values in a spreadsheet, e.g., a test dataset. Automatic parameterization of data entry values enables a tester to add additional test data cases to a test dataset without having to modify any test code. In general, automatic parameterization of data entry values increases test coverage and the value of a given functional test. In order for RFT to interact with a given object in an application, RFT must be able to understand interfaces of an object. Understanding interfaces of an object is typically not a problem for standard objects, e.g., edit fields, buttons, and list boxes. However, in some cases, application developers create their own custom objects to meet application requirements. In the case of custom objects, developers can create an object proxy to identify and code the interfaces to the custom objects. For example, an object proxy may be created using a software development kit (SDK) interface that allows users to program in Java or .NET to add functional testing support for Java and .NET custom controls.